package com.financing.wap.service;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

import com.financing.wap.dto.AccountCorpDTO;
import com.financing.wap.dto.AccountDetailDTO;
import com.financing.wap.dto.ActivitesDTO;
import com.financing.wap.dto.UserDTO;
import com.financing.wap.vo.AccountCorpVo;
import com.financing.wap.vo.AccountDetailVo;
import com.financing.wap.vo.AmountVO;

/**
 * 账户service
 * @author Mars
 * @createDate 2014年10月28日
 */
public interface IAccountService {
	
	/**
	 * 获取机构账户
	 * @param corpId
	 * @return
	 */
	public AccountCorpDTO getAccountCorpInfo(AccountCorpVo vo);
	
	
	/**
	 * 账户详情列表
	 * @param corpId
	 * @return
	 */
	public List<AccountCorpDTO> getAccountDetailCorpList(AccountCorpVo vo);
	
	/**
	 * 账户详情条目数
	 * @param corpId
	 * @return
	 */
	public int getAccountDetailCorpCount(AccountCorpVo vo);
	
	
	/**
	 * 平台今天所有返利
	 * @return
	 */
	public BigDecimal todayAllRebates();
	
	
	/**
	 * 根据用户Id获取账户详情
	 * @param id
	 * @return
	 */
	public AccountCorpDTO getFaAccountByUserId(String id);
	
	/**
	 * 根据用户Id获取账户详情
	 * @param id
	 * @return
	 */
	public Integer updateAccountBalanceActivity(AccountCorpDTO dto);
	
	/**
	 * 机构下属FA销售业绩
	 * @param corpId
	 * @return
	 */
	public  List<Map<String,Object>>  getCorpUserAmount(AmountVO queryVo);
	
	/**
	 * 机构下属FA销售业绩(记录总数)
	 * @param corpId
	 * @return
	 */
	public Integer getCorpUserAmountCount(AmountVO queryVo);
	
	/**
	 * 机构销售业绩
	 * @param corpId
	 * @return
	 */
	public  Map<String,Object>  getCorpAllAmount(String corpId);
	
	/**
	 * 机构部门销售业绩
	 * @param corpId
	 * @return
	 */
	public  List<Map<String,Object>>  getCorpDeptAmount(String corpId);
	
	/**
	 * 个人账户明细记录数
	 * @param corpId
	 * @return
	 */
	public Integer getUserAccountDetailCount(AccountDetailVo queryVo);
	
	/**
	 * 个人账户明细列表
	 * @param corpId
	 * @return
	 */
	public List<AccountDetailDTO> getUserAccountDetailList(AccountDetailVo queryVo);
	
	/**
	 * 新增用户账号明细(返佣)
	 * @param dto
	 * @return
	 */
	public Integer addUserAccountDetailByRebate(AccountDetailDTO dto);
	
	/**
	 * 新增用户账号明细(活动)
	 * @param dto
	 * @return
	 */
	public Integer addUserAccountDetailByActivity(AccountDetailDTO dto);
	
	/**
	 * 新增用户账号明细(活动礼品) 
	 * @param dto
	 * @param sourceCodeInt
	 * @return
	 */
	public Integer addUserAccountDetailByActivityGift(AccountDetailDTO dto,String sourceCodeInt)throws Exception;
	
	/**
	 * 当前活动 -账户操作 
	 * @param dto
	 * @param sourceCodeInt
	 * @return
	 */
	public Integer operatingActivities(ActivitesDTO bean,UserDTO user)throws Exception;
	
	/**
	 * 分享送红包1111元
	 * @param amountShare 金额
	 * @param userId  注册fa的userId
	 * @param sourceCodeInt 分享人ID
	 * @return
	 */
	public Integer shareGiftActivites(BigDecimal amountShare,String userId,String sourceCodeInt) throws Exception ;
	
	
	/**
	 * 返佣确认账户及明细变更
	 * @param userId 
	 * @param amount 变更金额
	 * @return
	 * @throws Exception
	 */
	public Integer changeAccountByRebateConfirm(String userId,BigDecimal amount)throws Exception ;
	


	/**
	 * 给userId(根据ActivitesDTO)红包及账户操作  (本方法不做事物控制，请务必在调此方法中事物控制)
	 * 如：A分享给B B注册成功
	 * 	 B的账户操作
	 * 	   先更新B的账户信息
	 *   1、 addActivitesGifAccount(Actbean,Integer B用户Id,Integer null,BigDecimal amount,String 01,String 01)
	 *   再更新分享人A的账户信息
	 *   2、 addActivitesGifAccount(Actbean,Integer A用户Id,Integer B用户Id,BigDecimal amount,String 01,String 02)
	 * @param bean 			活动bean
	 * @param userId 		用户id
	 * @param sourceCode 	
	 * @param amount  		红包金额
	 * @param aType   		礼品类型 01:红包
	 * @param aSource 		活动来源 01:注册，02：分享
	 * @return
	 * @throws Exception
	 */
	public Integer addActivitesGifAccount(ActivitesDTO bean,String userId,String sourceCode,BigDecimal amount,String aType,String aSource,String aStatus)throws Exception;
	
	
	/**
	 * 给userId(根据ActivitesDTO)红包  (本方法不做事物控制，请务必在调此方法中事物控制)
	 * 如：A分享给B B注册成功
	 * 	 B的红包添加
	 *   1、 addActivitesGif(Actbean,Integer B用户Id,Integer null,BigDecimal amount,String 01,String 01)
	 *   A的红包添加
	 *   2、 addActivitesGif(Actbean,Integer A用户Id,Integer B用户Id,BigDecimal amount,String 01,String 02)
	 * @param bean 			活动bean
	 * @param userId 		用户id
	 * @param sourceCode 	
	 * @param amount  		红包金额
	 * @param aType   		礼品类型 01:红包
	 * @param aSource 		活动来源 01:注册，02：分享
	 * @param aStatus 		活动状态 01:生效中，02：已生效，03：失效，04：提现
	 * @return
	 * @throws Exception
	 */
	public Integer addActivitesGif(ActivitesDTO bean,String userId,String sourceCode,BigDecimal amount,String aType,String aSource,String aStatus)throws Exception;
	
}
